﻿namespace CityProvince;

public partial class App : Application {
    private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

    public App() {
        #region 全局错误处理
        // UI线程未捕获异常处理事件
        Current.DispatcherUnhandledException += GlobalDispatcherUnhandledException;
        // 非UI线程未捕获异常处理事件(例如自己创建的一个子线程)
        AppDomain.CurrentDomain.UnhandledException += DomainUnhandledException;
        // Task线程内未捕获异常处理事件
        TaskScheduler.UnobservedTaskException += TaskSchedulerUnobservedTaskException;
        #endregion
        new SplashScreen("favicon.png").Show(true, true);
    }

    private void TaskSchedulerUnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e) {
        Logger.Error(e.Exception);
        // 提示信息
        System.Windows.MessageBox.Show(
            e.Exception.Message,
            "错误",
            MessageBoxButton.OK,
            MessageBoxImage.Error
        );
    }

    private void DomainUnhandledException(object sender, UnhandledExceptionEventArgs e) {
        if (e.ExceptionObject is Exception exception) {
            Logger.Fatal(exception);
            // 提示信息
            System.Windows.MessageBox.Show(
                exception.Message,
                "错误",
                MessageBoxButton.OK,
                MessageBoxImage.Error
            );
            Shutdown();
        }
    }

    private void GlobalDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) {
        e.Handled = true;
        Logger.Error(e.Exception);
        // 提示信息
        System.Windows.MessageBox.Show(
            Current.MainWindow,
             e.Exception.Message,
            "错误",
            MessageBoxButton.OK,
            MessageBoxImage.Error
        );
    }
}
